#include <iostream>
// 饿汉模式--程序一运行就加载对象，优点是使用方便快捷，缺点是程序启动时间长（空间换时间）
//  class Singleton
//  {
//  private:
//      Singleton() :_data(66)
//      {
//          std::cout<<"成功创建单例对象"<<std::endl;
//      }
//      ~Singleton() {}
//      Singleton(const Singleton &) = delete;

// private:
//     static Singleton _singleton;
//     int _data;

// public:
//     static Singleton &getInstance()
//     {
//         return _singleton;
//     }
//     int getData()
//     {
//         return _data;
//     }
// };
// Singleton Singleton::_singleton;

// 懒汉模式--只有对象在使用的时候才会进行加载，优点是在不使用对象时不会浪费资源，缺点是第一次使用的时候比较慢（时间换空间）
class Singleton
{
private:
    Singleton() : _data(66)
    {
        std::cout << "成功创建单例对象" << std::endl;
    }
    ~Singleton() {}
    Singleton(const Singleton &) = delete;

private:
    int _data;

public:
    static Singleton &getInstance()
    {
        static Singleton _singleton;
        return _singleton;
    }
    int getData()
    {
        return _data;
    }
};

int main()
{
    std::cout<<Singleton::getInstance().getData()<<std::endl;
    return 0;
}